# coding: utf-8
from Tkinter import *
from Aluno import *
from Professor import *
from Programa import *
from MateriaProfessor import *
from FuncoesDeValidacao import *
import tkMessageBox
import pickle

#Define fontes e tamanho das caixas de texto
fonte_label = ("Verdana","10","bold")
fonte_texto = ("Verdana","10")
comprimento_texto_nome = 40
comprimento_texto_email = 35
comprimento_texto_tel = 15

class janelaLogin:
    def __init__(self, raiz):
        
        #self.lista = []
        #self.arquivo = open("Usuarios.tab")
        #self.lista = pickle.load(self.arquivo)
        #self.arquivo.close()
        self.usuario = "admin"
        self.password = "admin"
        
        self.parente = raiz
        self.parente.title('SGFB - Login')
        self.parente.resizable(width = False, height = False)

        self.frame1 = Frame(self.parente)
        self.frame1.grid(row = 1, column = 1)
        self.frame2 = Frame(self.parente)
        self.frame2.grid(row = 2, column = 1)
        
        Label(self.frame1, text="Login: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.login= Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.login.grid(row = 2, column = 2, sticky = W)
        self.login.insert(1, "admin")
        self.login.focus_force()
        
        Label(self.frame1, text="Senha: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.senha = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto, show = "*")
        self.senha.grid(row = 3, column = 2, sticky = W)
        self.senha.insert(1, "admin")

        self.msg = Label(self.frame2, text = "", font = fonte_label)
        self.msg.grid(row = 1, column = 1)

        self.botao_entrar = Button(self.frame1, width = 10, command = self.Verificar, text = "Entrar")
        self.botao_entrar.grid(row = 5, column = 1, padx= 10)

        self.botao_cancelar = Button(self.frame1, width = 10, command = self.Cancelar, text = "Sair")
        self.botao_cancelar.grid(row = 5, column = 2, padx= 10)

        self.cancela = False

    def Verificar(self):
        if self.login.get() == self.usuario and self.senha.get() == self.password:
            raiz = Tk()
            janelaPrincipal = JanelaPrincipal(raiz)
            self.parente.destroy()
            
        elif self.login.get() != self.usuario and self.senha.get() == self.password:
            self.msg['text'] = "Login Incorreto"
            
        elif self.login.get() == self.usuario and self.senha.get() != self.password:
            self.msg['text'] = "Senha Incorreta"
            
        else:
            self.msg['text'] = "Login e Senha Incorretos"

    def Cancelar(self):
        if self.cancela==False:
            self.parente.destroy()

#CRIACAO E CONFIGURACAO DAS JANELAS
class JanelaPrincipal:
    def __init__(self,raiz):
        self.parente = raiz
        self.parente.title('SGFB - Sistema de Gerenciamento de Fluxo de Biblioteca')
        self.parente.minsize(width = 600, height = 400)
        self.parente.resizable(width=False, height=False)

        
        #Barra de Menu
        self.barramenu = Menu(self.parente)
        self.parente.config(menu = self.barramenu)

        #Frame Inicial
        self.container1 = Frame(self.parente)
        self.container1.grid(column = 1, row = 2)
        self.container1.focus_force()
                
        #Criando as opcoes
        self.opcao1 = Menu(self.barramenu)
        self.opcao2 = Menu(self.barramenu)
        self.opcao3 = Menu(self.barramenu)
        self.opcao4 = Menu(self.barramenu)
        
        #Adicionando a cascata
        self.barramenu.add_cascade(label = "Cadastro", menu = self.opcao1)
        self.barramenu.add_cascade(label = "Consulta", menu = self.opcao2)
        self.barramenu.add_cascade(label = "Biblioteca", menu = self.opcao3)
        self.barramenu.add_cascade(label = "Sair do Programa", menu = self.opcao4)

        #Configurando as op��es
        self.opcao1.add_command(label = "Aluno", command = self.abrirJanelaCadastroAluno)
        self.opcao1.add_command(label = "Professor", command = self.abrirJanelaDeCadastroDeProfessor)
        self.opcao1.add_command(label = "Funcionario", command = self.abrirJanelaDeCadastroDeFuncionario)
        self.opcao1.add_command(label = "Livro", command = self.abrirJanelaDeCadastroDeLivro)
        self.opcao2.add_command(label = "Aluno", command = self.abrirJanelaDeConsultarAluno)
        self.opcao2.add_command(label = "Professor", command = self.abrirJanelaDeConsultarProfessor)
        self.opcao2.add_command(label = "Funcionario", command = self.abrirJanelaDeConsultarFuncionario)
        self.opcao2.add_command(label = "Livro", command = self.abrirJanelaDeConsultarLivro)
        self.opcao3.add_command(label = "Novo Emprestimo Aluno", command = self.abrirJanelaDeNovoEmprestimoAluno)
        self.opcao3.add_command(label = "Consultar Emprestimos", command = self.abrirJanelaDeConsultarEmprestimo)
        self.opcao4.add_command(label = "Sair", command = self.Sair)

        #Metodo para nao abrir varias janelas
        self.JCDA = False
        self.JCOA = False
        self.JCDE = False
        self.JCOE = False
        self.JCDP = False
        self.JCOP = False
        self.JCDF = False
        self.JCOF = False
        self.JCDL = False
        self.JCOL = False

        
    #Metodos para abrir janelas
    def abrirJanelaCadastroAluno(self):
        #if self.JCDA==False:
            raizJCDA = Tk()
            CadastroAluno = JanelaCadastroAluno(raizJCDA)
            self.parente.destroy()
            
    def abrirJanelaDeConsultarAluno(self):
        if self.JCOA==False:
            raizJanelaConsultaDeAluno = Tk()
            janelaDeConsultarAluno = janelaDeConsultaDeAluno(raizJanelaConsultaDeAluno)
            self.parente.destroy()
            
    def abrirJanelaDeNovoEmprestimoAluno(self):
        if self.JCDE==False:
            raizJanelaNovoEmprestimoAluno = Tk()
            janelaNovoEmprestimoAluno = janelaDeNovoEmprestimoAluno(raizJanelaNovoEmprestimoAluno)
            self.parente.destroy()
            
    def abrirJanelaDeConsultarEmprestimo(self):
        if self.JCOE==False:
            raizJanelaConsultarEmprestimo = Tk()
            janelaConsultarEmprestimo = janelaDeConsultarEmprestimo(raizJanelaConsultarEmprestimo)
            self.parente.destroy()
            
    def abrirJanelaDeCadastroDeProfessor(self):
        if self.JCDP==False:
            raizJCDP = Tk()
            CadastroProfessor = janelaDeCadastroDeProfessor(raizJCDP)
            self.parente.destroy()
            
    def abrirJanelaDeConsultarProfessor(self):
        if  self.JCOP==False:
            raizJanelaConsultarProfessor = Tk()
            janelaDeConsultarProfessor = janelaDeConsultaDeProfessor(raizJanelaConsultarProfessor)
            self.parente.destroy()
            
    def abrirJanelaDeCadastroDeFuncionario(self):
        if self.JCDF==False:
            raizJanelaCadastrarFuncionario = Tk()
            janelaDeFuncionario = janelaDeCadastroDeFuncionario(raizJanelaCadastrarFuncionario)
            self.parente.destroy()
            
    def abrirJanelaDeConsultarFuncionario(self):
        if self.JCOF==False:
            raizJanelaConsultarFuncionario = Tk()
            janelaDeConsultarFuncionario = janelaDeConsultaDeFuncionario(raizJanelaConsultarFuncionario)
            self.parente.destroy()
            
    def abrirJanelaDeCadastroDeLivro(self):
        if self.JCDL==False:
            raizJanelaCadastrarLivro = Tk()
            janelaDeCadastrarFLivro = janelaDeCadastroDeLivro(raizJanelaCadastrarLivro)
            self.parente.destroy()
            
    def abrirJanelaDeConsultarLivro(self):
        if self.JCOL==False:
            raizJanelaConsultarLivro = Tk()
            janelaDeConsultarLivro = janelaDeConsultaDeLivro(raizJanelaConsultarLivro)  
            self.parente.destroy()

    def Sair(self):
        self.parente.destroy()


class JanelaCadastroAluno:
    def __init__(self,pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.title("Formulario de cadastro de Alunos")
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width=False, height=False)

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)
        self.frame3=Frame(self.meuPai)
        self.frame3.grid(row = 3, column = 1)

        #Formulario de cadastro
        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Nome Completo: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)              
        self.nome = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.nome.grid(row = 2, column = 2, sticky = W)
        self.nome.focus_force()
        
        Label(self.frame1, text="Serie: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.var_serie = StringVar(self.frame1) #A criacao dessa variavel eh obrigatoria
        self.var_serie.set('1') #Determina o valor padrao que aparece na lista de opcoes
        self.serie = OptionMenu(self.frame1, self.var_serie, '1','2','3','4','5','6','7','8','9')
        self.serie.config(width = 4)
        self.serie.grid(row = 3, column = 2, sticky = W)

        #Periodo = Fundamental ou Medio
        self.var_periodo = StringVar(self.frame1)
        self.var_periodo.set("Fundamental")
        self.periodo = OptionMenu(self.frame1, self.var_periodo, "Fundamental", "Medio")
        self.periodo.config(width = 11)
        self.periodo.grid(row = 3, column = 2, sticky = E)

        Label(self.frame1, text="Turno: ", font = fonte_label).grid(row = 4, column = 1, sticky = W) 
        self.var_turno = StringVar(self.frame1)
        self.var_turno.set('M') 
        self.turno = OptionMenu(self.frame1, self.var_turno, 'M', 'T', 'N')
        self.turno.config(width = 4)        
        self.turno.grid(row = 4, column = 2, sticky = W)
        
        Label(self.frame1, text="Matricula:", font = fonte_label).grid(row = 5, column = 1, sticky = W)
        self.matricula = Entry(self.frame1, width = 10, font = fonte_texto)
        self.matricula.grid(row = 5, column = 2, sticky = W)
        
        Label(self.frame1, text="E-mail Aluno: ", font = fonte_label).grid(row = 6, column = 1, sticky = W)
        self.email = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email.grid(row = 6, column = 2, sticky = W)

        Label(self.frame1, text="E-mail Pais: ", font = fonte_label).grid(row = 7, column = 1, sticky = W)
        self.email_pais = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email_pais.grid(row = 7, column = 2, sticky = W)
        

        Label(self.frame1, text="No Max de Emprestimos: ",font = fonte_label).grid(row = 8, column = 1, sticky = W)
        self.var_max_emprestimo = StringVar(self.frame1)
        self.var_max_emprestimo.set("3")
        self.max_emprestimo = OptionMenu(self.frame1, self.var_max_emprestimo, '1', '2', '3')
        self.max_emprestimo.config(width = 4)
        self.max_emprestimo.grid(row = 8, column = 2, sticky = W)

        Label(self.frame1, text="Autorizado: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.var_autorizacao = StringVar(self.frame1)
        self.var_autorizacao.set("Sim")
        self.autorizacao = OptionMenu(self.frame1, self.var_autorizacao, "Sim", "Nao")
        self.autorizacao.config(width = 4)
        self.autorizacao.grid(row = 9, column = 2, sticky = W)

        Label(self.frame2, text="").grid(row = 1, column = 1)
        Label(self.frame2, text="").grid(row = 2, column = 1)
        Label(self.frame2, text="").grid(row = 3, column = 1)
        botao_cadastrar = Button(self.frame2, width = 10, command = self.Cadastrar, text = "Cadastrar").grid(row = 4, column = 1, padx= 10)
        
        botao_cancelar = Button(self.frame2, width = 10, command = self.Cancelar, text = "Cancelar").grid(row = 4, column = 2, padx = 10)

        self.cancela = False

    def Cancelar(self):
        if self.cancela==False:
            raiz_cancela=Tk()
            janelaprincipal = JanelaPrincipal(raiz_cancela)
            self.meuPai.destroy()

    #Instancia a classe programa e cadastra o aluno(a função de verificação de n° matricula esta na classe programa)
    def Cadastrar(self):
        if verifica_campo_apenas_letras(self.nome.get()) and \
        verifica_campo_apenas_numeros(self.var_serie.get()) and \
        verifica_campo_apenas_letras(self.var_periodo.get()) and \
        verifica_campo_apenas_letras(self.var_turno.get()) and \
        verifica_email(self.email.get()) and \
        verifica_email(self.email_pais.get()) and \
        verifica_campo_apenas_numeros(self.var_max_emprestimo.get()) and \
        verifica_campo_apenas_letras(self.var_autorizacao.get()) and \
        verifica_campo_apenas_numeros(self.matricula.get()):
            self.sistema = programa()
            self.sistema.Cadastrar_Aluno(self.nome.get(), self.var_serie.get(), self.var_periodo.get(),
                                         self.var_turno.get(),self.email.get(), self.email_pais.get(),
                                         self.var_max_emprestimo.get(),self.var_autorizacao.get(), self.matricula.get())
        
        
class janelaDeNovoEmprestimoAluno:
    def __init__(self, pai):
        #Carrega o arquivo de Alunos usado na função de pesquisar alunos
        self.lista_de_alunos = []
        self.arquivo = open("Alunos.tab")
        self.lista_de_alunos = pickle.load(self.arquivo)
        self.arquivo.close()

        #Carrega o arquivo de Livros usado na função de pesquisar livros
        self.lista_de_livros = []
        self.arquivo = open("Livros.tab")
        self.lista_de_livros = pickle.load(self.arquivo)
        self.arquivo.close()
        
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Novo emprestimo para Aluno')
        
        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)

        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Nome do Aluno: ", font = fonte_label).grid(row=2, column = 1, sticky = W)
        self.nome = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.nome.grid(row = 2, column = 2, sticky = W)
        self.nome.focus_force()
        
        #dando erro na hora de atribuir um texto no objeto self.emprestimo lah na função Aluno_selecionado
        Label(self.frame1, text="Max de Emprestimo: ", font = fonte_label).grid(row=3, column = 1, sticky = W)
        self.emprestimo = Label(self.frame1, text="", font = fonte_texto).grid(row=3, column = 2, sticky = W)

        Label(self.frame1, text="Matricula do Aluno: ", font = fonte_label).grid(row=4, column = 1, sticky = W)
        self.matricula = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.matricula.grid(row = 4, column = 2, sticky = W)

        self.botao_pesquisar = Button(self.frame1, width = 10, command = self.Pesquisar_aluno, text = "Pesquisar")
        self.botao_pesquisar.grid(row = 4, column = 3, padx= 10)

        Label(self.frame1, text="").grid(row = 5, column = 1)

        Label(self.frame1, text="Titulo da Obra: ", font = fonte_label).grid(row=6, column = 1, sticky = W)
        self.titulo = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.titulo.grid(row = 6, column = 2, sticky = W)

        Label(self.frame1, text="Editora: ", font = fonte_label).grid(row = 7, column = 1, sticky = W)
        self.editora = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.editora.grid(row = 7, column = 2, sticky = W)

        Label(self.frame1, text="Tipo: ", font = fonte_label).grid(row = 8, column = 1, stick = W)
        self.var_tipo = StringVar(self.frame1)
        self.var_tipo.set('Didatico')
        self.tipo = OptionMenu(self.frame1, self.var_tipo, 'Didatico', 'Paradidatico', 'Artigo Revista', 'Artigo Jornal',
                               'Infantil', 'Revista', 'Jornal')
        self.tipo.config(width = 14)
        self.tipo.grid(row = 8, column = 2, stick = W)

        Label(self.frame1, text="N° da Obra: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.num_obra = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.num_obra.grid(row = 9, column = 2, sticky = W)

        Label(self.frame1, text="Codigo: ", font = fonte_label).grid(row = 10, column = 1, sticky = W)
        self.codigo = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.codigo.grid(row = 10, column = 2, sticky = W)

        self.botao_pesquisar_livro = Button(self.frame1, width = 9, command = self.Pesquisar_livro, text = "Pesquisar")
        self.botao_pesquisar_livro.grid(row = 10, column = 3, padx= 10)

        Label(self.frame1, text="Data do emprestimo: ", font = fonte_label).grid(row = 11, column = 1, sticky = W)

        Label(self.frame1, text="", font = fonte_label).grid(row = 12, column = 1, sticky = W)#Pula linha
        
        self.botao_adicionar_livro = Button(self.frame1, width = 14, command = self.Adicionar_livro, text = "Adicionar Obra")
        self.botao_adicionar_livro.grid(row = 13, column = 2, padx= 10, sticky = W)

        Label(self.frame2, text="Livro / Codigo", font = fonte_label).grid(row = 1, column = 1, sticky = W)
        self.lista_livros = Listbox(self.frame2, font = fonte_texto, width = 60, height = 3)
        self.lista_livros.grid(row = 2, column = 1, sticky = W)

        Label(self.frame2, text="Data Prevista de Entrega", font = fonte_label).grid(row = 3, column = 1)

        self.botao_excluir_livro = Button(self.frame2, width = 19, command = self.Excluir_livro, text = "Excluir Selecionado")
        self.botao_excluir_livro.grid(row = 4, column = 1, padx= 10, sticky = W)

        #A data de devolução aparece aqui
        self.data_entrega = Entry(self.frame2, width = comprimento_texto_tel, font = fonte_texto)
        self.data_entrega.grid(row = 4, column = 1,)

        self.botao_excluir_livro = Button(self.frame2, width = 19, command = self.Finalizar_emprestimo, text = "Concluir Emprestimo")
        self.botao_excluir_livro.grid(row = 4, column = 1, padx= 10, sticky = E)

        self.ctrl_pesquisarAluno = False
        self.ctrl_pesquisarLivro = False

        #Lista com os livros selecionados para emprestimo pelo usuario
        self.livros_selecionados=[]

    #Abre uma nova Janela para que o usuario pesquise por um novo aluno
    def Pesquisar_aluno(self):
        if self.ctrl_pesquisarAluno == False:
            self.raiz = Tk()
            self.raiz.resizable(width = False, height = False)
            self.raiz.title('Pesquisa de Aluno')
            
            self.frame1 = Frame(self.raiz)
            self.frame1.grid(row = 1, column = 1)
            self.frame2 = Frame(self.raiz)
            self.frame2.grid(row = 2, column = 1)
            

            Label(self.frame1, text = "Matricula: ", font = fonte_label).grid(row = 1, column = 1, sticky = W)
            self.pesq_matricula = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
            self.pesq_matricula.grid(row = 1, column = 2, sticky = W)
            
            #Chama a função de procurar alunos
            Label(self.frame1, text = " ", font = fonte_label).grid(row = 1, column = 3, sticky = W)
            self.botao_procurar = Button(self.frame1, width = 9, command = self.Procurar_aluno, text = "Procurar")
            self.botao_procurar.grid(row = 1, column = 4, sticky = W)
            
            Label(self.frame2, text='Nome    /    N° Matricula', font = fonte_label).grid(row = 1, column = 1, sticky = W)
            self.listbox_alunos = Listbox(self.frame2, font = fonte_texto, width = 34, height = 10)
            self.listbox_alunos.grid(row = 2, column = 1, sticky = W)

            #Cria uma barra de rolagem
            self.scroll = Scrollbar(self.frame2, command = self.listbox_alunos.yview)
            self.scroll.grid(row = 2, column = 2, sticky=(N,S))

            #Faz o scroll bar andar de acordo com a listbox_alunos
            self.listbox_alunos['yscrollcommand'] = self.scroll.set
            
            #Quando clicado em ok chama a função de seleção de aluno
            self.botao_procurar = Button(self.frame2, width = 9, command = self.Aluno_selecionado, text = "Ok")
            self.botao_procurar.grid(row = 3, column = 1, sticky = W)

            self.botao_procurar = Button(self.frame2, width = 9, command = None, text = "Cancelar")
            self.botao_procurar.grid(row = 3, column = 1, sticky = E)

            #Imprede que seja aberta outra janela do mesmo tipo
            self.ctrl_pesquisarAluno = True

    #Abre uma nova Janela para que o usuario pesquise por um novo aluno
    def Pesquisar_livro(self):
        if self.ctrl_pesquisarLivro == False:
            self.raiz = Tk()
            self.raiz.resizable(width = False, height = False)
            self.raiz.title('Pesquisa de Livros')

            self.frame1 = Frame(self.raiz)
            self.frame1.grid(row = 1, column = 1)
            self.frame2 = Frame(self.raiz)
            self.frame2.grid(row = 2, column = 1)

            Label(self.frame1, text = "Codigo: ", font = fonte_label).grid(row = 1, column = 1, sticky = W)
            self.pesq_codigo = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
            self.pesq_codigo.grid(row = 1, column = 2, sticky = W)

            #Chama a função de procurar alunos
            Label(self.frame1, text = " ", font = fonte_label).grid(row = 1, column = 3, sticky = W)
            self.botao_procurar = Button(self.frame1, width = 9, command = self.Procurar_livro, text = "Procurar")
            self.botao_procurar.grid(row = 1, column = 4, sticky = W)
            
            Label(self.frame2, text='Titulo    /    Codigo', font = fonte_label).grid(row = 1, column = 1, sticky = W)
            self.listbox_livros = Listbox(self.frame2, font = fonte_texto, width = 34, height = 10)
            self.listbox_livros.grid(row = 2, column = 1, sticky = W)

            #Cria uma barra de rolagem
            self.scroll = Scrollbar(self.frame2, command = self.listbox_livros.yview)
            self.scroll.grid(row = 2, column = 2, sticky=(N,S))

            #Faz o scroll bar andar de acordo com a listbox_alunos
            self.listbox_livros['yscrollcommand'] = self.scroll.set
            
            #Quando clicado em ok chama a função de seleção de aluno
            self.botao_procurar = Button(self.frame2, width = 9, command = self.Livro_selecionado, text = "Ok")
            self.botao_procurar.grid(row = 3, column = 1, sticky = W)

            self.botao_procurar = Button(self.frame2, width = 9, command = None, text = "Cancelar")
            self.botao_procurar.grid(row = 3, column = 1, sticky = E)

            #Impede que seja aberto outra janela do mesmo tipo
            self.ctrl_pesquisarLivro = True

    #Procura pelo aluno cujo numero de matricula bate com o informado
    def Procurar_aluno(self):
        self.listbox_alunos.delete(0, END)
        self.lista_2=[]

        for item in self.lista_de_alunos:
            nome = item.getNome()
            matricula = item.getMatricula()
            entrada = self.pesq_matricula.get()
            if entrada in matricula:
                self.lista_2.append(item)
                self.listbox_alunos.insert(END, nome + '    ' + matricula)
            elif entrada == '':
                for item in self.lista_de_alunos:
                    self.lista_2.append(item)
                    self.listbox_alunos.insert(END, nome + '    ' + matricula)

        
    #Insere na tela de novo emprestimo as informações do aluno selecionado
    def Aluno_selecionado(self):
        indice = self.listbox_alunos.curselection()[0]
        self.valor = self.lista_2[int(indice)]

        #Primeiro limpa o campo que vai receber os dados
        self.nome.delete(0, len(self.nome.get()))
        #self.label_max_emprestimo['text']= ''
        self.matricula.delete(0, len(self.matricula.get()))

        #Insere no campo nome e matricula da janela de novo emprestimo o nome e a matricula do aluno selecionado
        self.nome.insert(0, self.valor.getNome())
        #self.emprestimo['text']= "a"
        self.matricula.insert(0, self.valor.getMatricula())

        
        self.ctrl_pesquisarAluno = False
        self.raiz.destroy()
        
    #Daqui pra baixo é o mesmo de cima apenas com mudanças de variaveis
    def Procurar_livro(self):
        self.listbox_livros.delete(0, END)
        self.lista_2=[]

        for item in self.lista_de_livros:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                estado = item.getEmprestado()
                entrada = self.pesq_codigo.get()
                
                if entrada in codigo:
                    if estado == False:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada == '':
                    if estado == False:
                        for item in self.lista:
                            self.lista_2.append(item)
                            self.listbox_livros.insert(END, titulo + '    ' + codigo)
                        

    def Livro_selecionado(self):
        indice = self.listbox_livros.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        
        self.titulo.delete(0, len(self.titulo.get()))
        self.editora.delete(0, len(self.editora.get()))
        self.num_obra.delete(0, len(self.num_obra.get()))
        self.codigo.delete(0, len(self.codigo.get()))
        
        self.titulo.insert(0, self.valor.getTitulo())
        self.editora.insert(0, self.valor.getEditora())
        self.var_tipo.set(self.valor.getTipo())
        self.num_obra.insert(0, self.valor.getNum_edicao())
        self.codigo.insert(0, self.valor.getCodigo())
        
        self.ctrl_pesquisarLivro = False
        self.raiz.destroy()

    def Adicionar_livro(self):
        for self.aluno in self.lista_de_alunos:
            if self.aluno.getMatricula() == self.matricula.get():
                
                if self.aluno.getMaxDeEmprestimo() == "3":
                    
                    if len(self.livros_selecionados) > 2:
                        tkMessageBox.showwarning("Mensagem do sistema", "Limite de 3 livros por usuario ultrapassado.")
                        
                    elif len(self.livros_selecionados) <= 2:
                        for self.livro in self.lista_de_livros:
                            if self.livro.getCodigo() == self.codigo.get():
                                self.livros_selecionados.append(self.livro)
                                self.lista_livros.insert(END, self.livro.getTitulo() + '    ' + self.livro.getCodigo())

                elif self.aluno.getMaxDeEmprestimo() == "2":

                    if len(self.livros_selecionados) > 1:
                        tkMessageBox.showwarning("Mensagem do sistema", "Este cliente so pode realizar 2 emprestimos")
                        
                    elif len(self.livros_selecionados) <= 1:
                        for self.livro in self.lista_de_livros:
                            if self.livro.getCodigo() == self.codigo.get():
                                self.livros_selecionados.append(self.livro)
                                self.lista_livros.insert(END, self.livro.getTitulo() + '    ' + self.livro.getCodigo())

                elif self.aluno.getMaxDeEmprestimo() == "1":

                    if len(self.livros_selecionados) > 0:
                        tkMessageBox.showwarning("Mensagem do sistema", "Este cliente so pode realizar 1 emprestimo")
                        
                    elif len(self.livros_selecionados) <= 0:
                        for self.livro in self.lista_de_livros:
                            if self.livro.getCodigo() == self.codigo.get():
                                self.livros_selecionados.append(self.livro)
                                self.lista_livros.insert(END, self.livro.getTitulo() + '    ' + self.livro.getCodigo())

                elif self.aluno.getMaxDeEmprestimo() == "0":
                    
                    tkMessageBox.showwarning("Mensagem do sistema", "Este cliente possui 3 livros em posse, logo não pode realizar Emprestimos")

            

    def Excluir_livro(self):
        indice = self.lista_livros.curselection()[0]
        self.valor = self.livros_selecionados[int(indice)]

        self.livros_selecionados.remove(self.valor)
        #print self.livros_selecionados
        self.lista_livros.delete(indice, indice)

    def Finalizar_emprestimo(self):
        try:
            ok = 0
            for self.aluno in self.lista_de_alunos:
                if self.aluno.getMatricula() == self.matricula.get():
                    if self.aluno.getAutorizacao() == "Sim":
                        
                        self.livros_de_posse = self.aluno.getEmprestimos()
                        self.livros_de_posse.append(self.livros_selecionados)
                        self.aluno.setEmprestimos(self.livros_de_posse)
                        max_atual = int(self.aluno.getMaxDeEmprestimo()) - len(self.livros_selecionados)
                        self.aluno.setMaxDeEmprestimo(str(max_atual))

                        self.arquivo = open("Alunos.tab", "w")
                        pickle.dump(self.lista_de_alunos, self.arquivo)
                        self.arquivo.close()
                        
                        for self.livro1 in self.livros_selecionados:
                            for self.livro2 in self.lista_de_livros:
                                if self.livro1.getCodigo() == self.livro2.getCodigo():
                                    self.livro2.setEmprestado(True)
                                    ok = 1
                                    

            if ok == 1:
                tkMessageBox.showinfo("Mensagem do sistema", "Deu certo")
                self.arquivo = open("Livros.tab", "w")
                pickle.dump(self.lista_de_livros, self.arquivo)
                self.arquivo.close()
            
        except:
            None
                


    
class janelaDeConsultarEmprestimo:
    def __init__(self, pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Consulta de emprestimos')
    
        self.labelPesquisar = Label(self.meuPai)
        self.labelPesquisar['text'] = 'Titulo:'
        self.labelPesquisar.grid(column = 1, row = 1, sticky = W)
        
        self.txtPesquisar = Entry(self.meuPai, width = 50)        
        self.txtPesquisar.grid(column = 1, row = 2, sticky = W)
        
        self.listboxLivros = Listbox(self.meuPai)
        self.listboxLivros.grid(column = 1, row = 3, sticky = W)
        self.listboxLivros.config(width = 50)
        self.listboxLivros.insert(END, '00001' + ' ' + 'Fulando de tal')
        self.listboxLivros.insert(END, '00003' + ' ' + 'Ze mane')

#Precisa ser enxuto
#E tambem colocar função pra quando o usuario apertar a tecla enter
class janelaDeConsultaDeAluno:
    def __init__(self, pai):
        #cria lista de objetos alunos
        self.lista = []
        self.arquivo = open("Alunos.tab")
        self.lista = pickle.load(self.arquivo)
        self.arquivo.close()
        
        #inicia o frame
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Consulta de alunos')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)

        #Menu de opções de pesquisa
        self.var_escolha = StringVar(self.frame1)
        self.var_escolha.set('Nome') 
        self.escolha = OptionMenu(self.frame1, self.var_escolha, 'Nome', 'Matricula')
        self.escolha.config(width = 8)        
        self.escolha.grid(row = 1, column = 1, sticky = W)

        #Entrada do valor a ser pesquisado
        self.texto = Entry(self.frame1, width = 20, font = fonte_texto)
        self.texto.grid(row = 1, column = 1, sticky = E)
        self.texto.focus_force()

        #Botao de pesquisa
        self.botao_pesquisar = Button(self.frame1, width = 15, command = self.Pesquisar, text = "Pesquisar")
        self.botao_pesquisar.grid(row = 1, column = 3, sticky = W)

        #cria uma listbox
        Label(self.frame1, text='Nome    /    N° Matricula', font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.listbox_alunos = Listbox(self.frame1, font = fonte_texto, width = 35)
        self.listbox_alunos.grid(row = 3, column = 1, sticky = W)

        #Cria uma barra de rolagem
        self.scroll = Scrollbar(self.frame1, command = self.listbox_alunos.yview)
        self.scroll.grid(row = 3, column = 2, sticky=(N,S))

        #Faz o scroll bar andar de acordo com a listbox_alunos
        self.listbox_alunos['yscrollcommand'] = self.scroll.set

        #cria uma nova listbox
        Label(self.frame1, text='Perfil', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.listbox_att = Listbox(self.frame1, font = fonte_texto, width = 40)
        self.listbox_att.grid(row = 3, column = 3, sticky = W)

        #Botao que quando clicado imprime os atributos completos do objeto aluno no segundo listbox
        Label(self.frame1, text="").grid(row = 4, column = 1)
        self.botao_mostrar_att = Button(self.frame1, width = 15, command = self.Escolha, text = "Perfil Completo")
        self.botao_mostrar_att.grid(row = 5, column = 1, sticky = W, padx= 10)

        #Botão pra editar objeto selecionado
        self.botao_editar = Button(self.frame1, width = 15, command = self.Editar, text = "Editar")
        self.botao_editar.grid(row = 5, column = 1, sticky = E, padx= 10)

        #Botão pra excluir objeto selecionado
        self.botao_excluir = Button(self.frame1, width = 15, command = self.Excluir, text = "Deletar")
        self.botao_excluir.grid(row = 6, column = 1, sticky = W, padx= 10, pady = 10)


    #Funcao do botao que mostra os att
    def Escolha(self): 
        try:
            indice = self.listbox_alunos.curselection()[0]
            self.valor = self.lista_2[int(indice)]
            
            nome =  self.valor.getNome()
            serie = self.valor.getSerie()
            periodo = self.valor.getPeriodo()
            turno = self.valor.getTurno()
            email = self.valor.getEmail()
            email_pais = self.valor.getEmailPais()
            max_emprestimo = self.valor.getMaxDeEmprestimo()
            autorizado = self.valor.getAutorizacao()
            matricula = self.valor.getMatricula()
            
            self.listbox_att.delete(0, END)
            self.listbox_att.insert(END, 'Nome: ' + '  ' + nome)
            self.listbox_att.insert(END, 'Serie: ' + '  ' + serie)
            self.listbox_att.insert(END, 'Periodo: ' + '  ' + periodo)
            self.listbox_att.insert(END, 'Turno: ' + '  ' + turno)
            self.listbox_att.insert(END, 'Email: ' + '  ' + email)
            self.listbox_att.insert(END, 'Email Pais: ' + '  ' + email_pais)
            self.listbox_att.insert(END, 'Max de Emprestimos: ' + '  ' + max_emprestimo)
            self.listbox_att.insert(END, 'Autorizado: ' + '  ' + autorizado)
            self.listbox_att.insert(END, 'Matricula: ' + '  ' + matricula)
        except:
            self.value = None

    #Fução que pesquisa os objetos 
    def Pesquisar(self):
        #Atualiza a lista de alunos
        self.lista = []
        self.arquivo = open("Alunos.tab")
        self.lista = pickle.load(self.arquivo)
        self.arquivo.close()
        
        self.listbox_alunos.delete(0, END)
        self.lista_2=[]
        
        #pesquisa por nome
        if self.var_escolha.get() == 'Nome':
            for item in self.lista:
                nome = item.getNome()
                matricula = item.getMatricula()
                entrada = self.texto.get()
                
                nome_grande = nome.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in nome_grande:
                    self.lista_2.append(item)
                    self.listbox_alunos.insert(END, nome + '    ' + matricula)

                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_alunos.insert(END, nome + '    ' + matricula)

        #pesquisa por matricula            
        if self.var_escolha.get() == 'Matricula':
            for item in self.lista:
                nome = item.getNome()
                matricula = item.getMatricula()
                entrada = self.texto.get()
                if entrada in matricula:
                    self.lista_2.append(item)
                    self.listbox_alunos.insert(END, nome + '    ' + matricula)
                elif entrada == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_alunos.insert(END, nome + '    ' + matricula)
                        
    #Função pra deletar o aluno do sistema, é preciso colocar uma caixa de texto
    #pra quando o usuario escolher a opção o sistema perguntar se é isso mesmo
    #que ele deseja fazer
    def Excluir(self):
        indice = self.listbox_alunos.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        self.lista.remove(self.valor)
        self.arquivo = open('Alunos.tab', 'w')
        pickle.dump(self.lista, self.arquivo)
        self.arquivo.close()
        tkMessageBox.showinfo('Mensagem do sistema', 'O Aluno foi excluido com sucesso.')

    def Editar(self):
        raizEdicao = Tk()
        janelaEdicao = JanelaEdicaoAluno(raizEdicao)
        
        #Extraindo dados para insercao no formulario de edicao
        indice = self.listbox_alunos.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        nome =  self.valor.getNome()
        serie = self.valor.getSerie()
        periodo = self.valor.getPeriodo()
        turno = self.valor.getTurno()
        email = self.valor.getEmail()
        email_pais = self.valor.getEmailPais()
        max_emprestimo = self.valor.getMaxDeEmprestimo()
        autorizado = self.valor.getAutorizacao()
        matricula = self.valor.getMatricula()
        
        #Insercao dos dados nos widgets da janela de edicao
        janelaEdicao.nome.insert(0,nome)        
        janelaEdicao.var_serie.set(serie)
        janelaEdicao.var_periodo.set(periodo)
        janelaEdicao.var_turno.set(turno)
        janelaEdicao.email.insert(0, email)
        janelaEdicao.email_pais.insert(0, email_pais)
        janelaEdicao.var_max_emprestimo.set(max_emprestimo)
        janelaEdicao.var_autorizacao.set(autorizado)
        janelaEdicao.matricula.insert(0, matricula)
                    
            

#OBS: O professor pode ministrar mais de uma materia em turnos diferentes, então o ideal seria criar um dicionario
#     onde a chave seria a materia e o conteudo da chave o turno da materia, e na interface grafica o usuario selecionaria
#     uma materia e um turno e adicionaria na lista de materias ministradas por aquele professor
#     Exemplo: Usuario seleciona uma materia, depois um turno e clica no botão "adicionar a lista" o dic contendo
#              a materia e o turno é adicionada a lista de materias do professor, caso ele queira add novas materias
#              é so repetir o processo. (IMPLEMENTADO)
class janelaDeCadastroDeProfessor:
    def __init__(self, pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Cadastro de professor')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)
        self.frame3=Frame(self.meuPai)
        self.frame3.grid(row = 3, column = 1)

        #Formulario de cadastro
        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Nome Completo: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)              
        self.nome = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.nome.grid(row = 2, column = 2, sticky = W)
        self.nome.focus_force()

        Label(self.frame1, text="Telefone: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.telefone = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.telefone.grid(row = 3, column = 2, sticky = W)

        Label(self.frame1, text="Cpf: ", font = fonte_label).grid(row = 4, column = 1, sticky = W)
        self.cpf = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.cpf.grid(row = 4, column = 2, sticky = W)
        
        Label(self.frame1, text="Materia que ministra: ", font = fonte_label).grid(row = 5, column = 1, sticky = W)
        self.var_materia_ministrada = StringVar(self.frame1)
        self.var_materia_ministrada.set('Portugues')
        self.materia_ministrada = OptionMenu(self.frame1, self.var_materia_ministrada, 'Portugues', 'Matemarica','Historia','Geografia','Fisica','Quimica','Ciencias',
                                             'Educacao Ambiental','Educacao Fisica','Filosofia', 'Sociologia', 'Atualidades')
        self.materia_ministrada.config(width = 18)
        self.materia_ministrada.grid(row = 5, column = 2, sticky = W)

        Label(self.frame1, text="Turno: ", font = fonte_label).grid(row = 6, column = 1, sticky = W)
        self.var_turno = StringVar(self.frame1)
        self.var_turno.set('M')
        self.turno = OptionMenu(self.frame1, self.var_turno, 'M', 'T', 'N' )
        self.turno.config(width = 18)
        self.turno.grid(row = 6, column = 2, sticky = W)

        self.botao_adicionar_materia = Button(self.frame1, width = 17, command = self.Adicionar_Materia, text = "Adicionar Materia")
        self.botao_adicionar_materia.grid(row = 6, column = 2, sticky = E)

        Label(self.frame1, text="Email: ", font = fonte_label).grid(row = 7, column = 1, stick = W)
        self.email = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email.grid(row = 7, column = 2, stick = W)

        Label(self.frame1, text="No Max de Emprestimos: ", font = fonte_label).grid(row = 8, column = 1, stick = W)
        self.var_max_emprestimo = StringVar(self.frame1)
        self.var_max_emprestimo.set('3')
        self.max_emprestimo = OptionMenu(self.frame1, self.var_max_emprestimo, '1', '2', '3')
        self.max_emprestimo.config(width = 4)
        self.max_emprestimo.grid(row = 8, column = 2, stick = W)

        Label(self.frame1, text="Autorizado: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.var_autorizacao = StringVar(self.frame1)
        self.var_autorizacao.set("Sim")
        self.autorizacao = OptionMenu(self.frame1, self.var_autorizacao, "Sim", "Nao")
        self.autorizacao.config(width = 4)
        self.autorizacao.grid(row = 9, column = 2, sticky = W)

        Label(self.frame2, text="Materias Ministradas", font = fonte_label).grid(row = 1, column = 1, sticky = W)
        Label(self.frame2, text="Materia / Turno", font = fonte_label).grid(row = 2, column = 1, sticky = W)
        
        Label(self.frame3, text="").grid(row = 3, column = 1)
        self.botao_cadastrar = Button(self.frame3, width = 10, command = self.Cadastrar, text = "Cadastrar").grid(row = 4, column = 1, padx= 10)
        self.botao_cancelar = Button(self.frame3, width = 10, command = self.Cancelar, text = "Cancelar").grid(row = 4, column = 2, padx = 10)
        self.botao_cancelar = Button(self.frame2, width = 15, command = self.Excluir_Materia, text = "Excluir Materia").grid(row = 3, column = 2, padx = 10)

        self.lista_materias = Listbox(self.frame2, font = fonte_texto, width = 25, height = 5)
        self.lista_materias.grid(row = 3, column = 1, sticky = W)
   
        self.cancela = False

        #lista de materias de professor
        self.materias = []

    #Cria uma lista de materias ministradas pelo professor e mostra na tela
    def Adicionar_Materia(self):
        self.obj_materia = materia_Professor(self.var_materia_ministrada.get(),
                                             self.var_turno.get())
        self.materias.append(self.obj_materia)
        self.lista_materias.insert(END, self.obj_materia.getMateria() + '    ' + self.obj_materia.getTurno())
            
    ###########################################################################
    ###Precisa colocar essa função para o caso do usuario querer voltar atras #
    ###na hora que cadastrou uma materia                                      #
    ###########################################################################
    #(IMPLEMENTADO)
    def Excluir_Materia(self):
        indice = self.lista_materias.curselection()[0]
        self.valor = self.materias[int(indice)]

        self.materias.remove(self.valor)
        print self.materias
        self.lista_materias.delete(indice, indice)
        
        

    def Cancelar(self):
        if self.cancela==False:
            raiz_cancela=Tk()
            janelaprincipal = JanelaPrincipal(raiz_cancela)
            self.meuPai.destroy()

    #Instancia a classe programa e cadastra o professor
    def Cadastrar(self):
        if verifica_campo_apenas_letras(self.nome.get()) and \
        verifica_telefone(self.telefone.get()) and \
        verifica_campo_apenas_numeros(self.cpf.get()) and \
        verifica_email(self.email.get()) and \
        verifica_campo_apenas_numeros(self.var_max_emprestimo.get()) and \
        verifica_campo_apenas_letras(self.var_autorizacao.get()):
            self.sistema = programa()
            self.sistema.Cadastrar_Professor(self.nome.get(), self.telefone.get(), self.cpf.get(), self.materias, self.email.get(),
                                             self.var_max_emprestimo.get(), self.var_autorizacao.get())
            


class janelaDeConsultaDeProfessor:
    def __init__(self, pai):
        #cria lista de objetos Professor
        self.lista = []
        self.arquivo = open("Professores.tab")
        self.lista = pickle.load(self.arquivo)
        self.arquivo.close()
        
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Consulta de professor')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.frame1)
        self.frame2.grid(row = 5, column = 1)

        #Menu de opções de pesquisa
        self.var_escolha = StringVar(self.frame1)
        self.var_escolha.set('Nome') 
        self.escolha = OptionMenu(self.frame1, self.var_escolha, 'Nome', 'Cpf')
        self.escolha.config(width = 8)        
        self.escolha.grid(row = 1, column = 1, sticky = W)

        #Entrada do valor a ser pesquisado
        self.texto = Entry(self.frame1, width = 20, font = fonte_texto)
        self.texto.grid(row = 1, column = 1, sticky = E)
        self.texto.focus_force()

        #Botao de pesquisa
        self.botao_pesquisar = Button(self.frame1, width = 15, command = self.Pesquisar, text = "Pesquisar")
        self.botao_pesquisar.grid(row = 1, column = 3, sticky = W)

        #cria uma listbox
        Label(self.frame1, text='Nome    /    Cpf', font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.listbox_professores = Listbox(self.frame1, font = fonte_texto, width = 35)
        self.listbox_professores.grid(row = 3, column = 1, sticky = W)

        #Cria uma barra de rolagem
        self.scroll = Scrollbar(self.frame1, command = self.listbox_professores.yview)
        self.scroll.grid(row = 3, column = 2, sticky=(N,S))

        #Faz o scroll bar andar de acordo com a listbox_professores
        self.listbox_professores['yscrollcommand'] = self.scroll.set

        #cria uma nova listbox
        Label(self.frame1, text='Perfil', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.listbox_att = Listbox(self.frame1, font = fonte_texto, width = 40)
        self.listbox_att.grid(row = 3, column = 3, sticky = W)

        #Botao que quando clicado imprime os atributos completos do objeto professor no segundo listbox
        self.botao_mostrar_att = Button(self.frame2, width = 15, command = self.Escolha, text = "Perfil Completo")
        self.botao_mostrar_att.grid(row = 2, column = 1, sticky = NW, padx= 10)

        #Botão pra editar objeto selecionado
        self.botao_editar = Button(self.frame2, width = 15, command = None, text = "Editar")
        self.botao_editar.grid(row = 2, column = 2, sticky = NE, padx= 10)

        #Botão pra excluir objeto selecionado
        self.botao_excluir = Button(self.frame2, width = 15, command = self.Excluir, text = "Deletar")
        self.botao_excluir.grid(row = 3, column = 1, sticky = NW, padx= 10, pady = 10)

        #Listbox das materias do professor
        Label(self.frame1, text='Materia   /    Turno', font = fonte_label).grid(row = 4, column = 3, sticky = W)
        self.listbox_mat_professores = Listbox(self.frame1, font = fonte_texto, width = 25, height = 5)
        self.listbox_mat_professores.grid(row = 5, column = 3, sticky = W)

    #Fução que pesquisa os objetos 
    def Pesquisar(self):
        self.listbox_professores.delete(0, END)
        self.lista_2=[]
        
        #pesquisa por nome
        if self.var_escolha.get() == 'Nome':
            for item in self.lista:
                nome = item.getNome()
                cpf = item.getCpf()
                entrada = self.texto.get()
                
                nome_grande = nome.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in nome_grande:
                    self.lista_2.append(item)
                    self.listbox_professores.insert(END, nome + '    ' + cpf)

                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_professores.insert(END, nome + '    ' + cpf)

        #pesquisa por matricula            
        if self.var_escolha.get() == 'Cpf':
            for item in self.lista:
                nome = item.getNome()
                cpf = item.getCpf()
                entrada = self.texto.get()
                if entrada in cpf:
                    self.lista_2.append(item)
                    self.listbox_professores.insert(END, nome + '    ' + cpf)
                elif entrada == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_professores.insert(END, nome + '    ' + cpf)

    def Escolha(self): 
        try:
            indice = self.listbox_professores.curselection()[0]
            self.valor = self.lista_2[int(indice)]
            
            nome =  self.valor.getNome()
            telefone = self.valor.getTelefone()
            cpf = self.valor.getCpf()
            materia = self.valor.getMaterias()
            email = self.valor.getEmail()
            max_emprestimo = self.valor.getMaxDeEmprestimo()
            autorizado = self.valor.getAutorizacao()
            
            self.listbox_att.delete(0, END)
            self.listbox_att.insert(END, 'Nome: ' + '  ' + nome)
            self.listbox_att.insert(END, 'Telefone: ' + '  ' + telefone)
            self.listbox_att.insert(END, 'Cpf: ' + '  ' + cpf)
            self.listbox_att.insert(END, 'Email: ' + '  ' + email)
            self.listbox_att.insert(END, 'Max de Emprestimos: ' + '  ' + max_emprestimo)
            self.listbox_att.insert(END, 'Autorizado: ' + '  ' + autorizado)
        except:
            self.value = None

        for item in materia:
            self.listbox_mat_professores.insert(END, item.getMateria() + '    ' + item.getTurno())

    def Excluir(self):
        indice = self.listbox_professores.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        self.lista.remove(self.valor)
        self.arquivo = open('Professores.tab', 'w')
        pickle.dump(self.lista, self.arquivo)
        self.arquivo.close()
        tkMessageBox.showinfo('Mensagem do sistema', 'O Professor foi excluido com sucesso.')


class janelaDeCadastroDeLivro:
    def __init__(self, pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Cadastro de Livro')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)

        #Formulario de cadastro
        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Titulo: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)              
        self.titulo = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.titulo.grid(row = 2, column = 2, sticky = W)
        self.titulo.focus_force()

        Label(self.frame1, text="Sub Titulo: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.sub_titulo = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.sub_titulo.grid(row = 3, column = 2, sticky = W)

        Label(self.frame1, text="Autor: ", font = fonte_label).grid(row = 4, column = 1, sticky = W)
        self.autor = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.autor.grid(row = 4, column = 2, sticky = W)
        
        Label(self.frame1, text="Conservação: ", font = fonte_label).grid(row = 5, column = 1, sticky = W)
        self.var_conservacao = StringVar(self.frame1)
        self.var_conservacao.set('Novo')
        self.conservacao = OptionMenu(self.frame1, self.var_conservacao, 'Novo', 'Usado')
        self.conservacao.config(width = 5)
        self.conservacao.grid(row = 5, column = 2, sticky = W)

        #Precisa chamar uma função pra adicionar um calendario e o usuario selecionar a data do cadastro
        Label(self.frame1, text="Data do cadastro: ", font = fonte_label).grid(row = 6, column = 1, sticky = W)

        Label(self.frame1, text="Editora: ", font = fonte_label).grid(row = 7, column = 1, stick = W)
        self.editora = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.editora.grid(row = 7, column = 2, stick = W)

        Label(self.frame1, text="Tipo: ", font = fonte_label).grid(row = 8, column = 1, stick = W)
        self.var_tipo = StringVar(self.frame1)
        self.var_tipo.set('Didatico')
        self.tipo = OptionMenu(self.frame1, self.var_tipo, 'Didatico', 'Paradidatico', 'Artigo Revista', 'Artigo Jornal',
                               'Infantil', 'Revista', 'Jornal')
        self.tipo.config(width = 14)
        self.tipo.grid(row = 8, column = 2, stick = W)

        Label(self.frame1, text="N° Edição: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.num_edicao = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.num_edicao.grid(row = 9, column = 2, stick = W)

        Label(self.frame1, text="Codigo do Livro: ", font = fonte_label).grid(row = 10, column = 1, sticky = W)
        self.cod_livro = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.cod_livro.grid(row = 10, column = 2, stick = W)

        Label(self.frame1, text="Materia: ", font = fonte_label).grid(row = 11, column = 1, sticky = W)
        self.var_materia_livro = StringVar(self.frame1)
        self.var_materia_livro.set('Portugues')
        self.materia_livro = OptionMenu(self.frame1, self.var_materia_livro, 'Portugues', 'Matemarica','Historia','Geografia',
                                        'Fisica','Quimica', 'Ciencias','Educacao Ambiental','Educacao Fisica','Filosofia',
                                        'Sociologia', 'Atualidades', 'Outra')
        self.materia_livro.config(width = 18)
        self.materia_livro.grid(row = 11, column = 2, sticky = W)
        
        Label(self.frame2, text="").grid(row = 1, column = 1)
        self.botao_cadastrar = Button(self.frame2, width = 10, command = self.Cadastrar, text = "Cadastrar").grid(row = 2, column = 1, padx= 10)
        self.botao_cancelar = Button(self.frame2, width = 10, command = None, text = "Cancelar").grid(row = 2, column = 2, padx = 10)
        
        self.cancela = False

    def Cadastrar(self):
        if verifica_campo_apenas_letras(self.titulo.get()) and \
        verifica_campo_apenas_letras(self.sub_titulo.get()) and \
        verifica_campo_apenas_letras(self.autor.get()) and \
        verifica_campo_apenas_letras(self.var_conservacao.get()) and \
        verifica_campo_apenas_letras(self.editora.get()) and \
        verifica_campo_apenas_letras(self.var_tipo.get()) and \
        verifica_campo_apenas_numeros(self.num_edicao.get()) and \
        verifica_campo_apenas_numeros(self.cod_livro.get()) and \
        verifica_campo_apenas_letras(self.var_materia_livro.get()):
            self.sistema = programa()
            self.sistema.Cadastrar_Livro(self.titulo.get(), self.sub_titulo.get(), self.autor.get(),
                                     self.var_conservacao.get(), self.editora.get(), self.var_tipo.get(),
                                     self.num_edicao.get(), self.cod_livro.get(), self.var_materia_livro.get())

    def Cancelar(self):
        if self.cancela==False:
            raiz_cancela=Tk()
            janelaprincipal = JanelaPrincipal(raiz_cancela)
            self.meuPai.destroy()

class janelaDeConsultaDeLivro:
    def __init__(self, pai):
        self.lista = []
        self.arquivo = open("Livros.tab")
        self.lista = pickle.load(self.arquivo)
        self.arquivo.close()
        
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Consulta de Livro')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.frame1)
        self.frame2.grid(row = 5, column = 1)

        #Menu de opções de pesquisa
        self.var_escolha = StringVar(self.frame1)
        self.var_escolha.set('Titulo') 
        self.escolha = OptionMenu(self.frame1, self.var_escolha, 'Titulo', 'Sub Titulo', 'Autor', 'Editora', 'Materia', 'Codigo')
        self.escolha.config(width = 8)        
        self.escolha.grid(row = 1, column = 1, sticky = W)

        #Entrada do valor a ser pesquisado
        self.texto = Entry(self.frame1, width = 20, font = fonte_texto)
        self.texto.grid(row = 1, column = 1, sticky = E)
        self.texto.focus_force()

        #Botao de pesquisa
        self.botao_pesquisar = Button(self.frame1, width = 15, command = self.Pesquisar, text = "Pesquisar")
        self.botao_pesquisar.grid(row = 1, column = 3, sticky = W)

        #cria uma listbox
        Label(self.frame1, text='Titulo   /    Codigo', font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.listbox_livros = Listbox(self.frame1, font = fonte_texto, width = 35)
        self.listbox_livros.grid(row = 3, column = 1, sticky = W)

        #Cria uma barra de rolagem
        self.scroll = Scrollbar(self.frame1, command = self.listbox_livros.yview)
        self.scroll.grid(row = 3, column = 2, sticky=(N,S))

        #Faz o scroll bar andar de acordo com a listbox_professores
        self.listbox_livros['yscrollcommand'] = self.scroll.set

        #cria uma nova listbox
        Label(self.frame1, text='Atributos', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.listbox_att = Listbox(self.frame1, font = fonte_texto, width = 40)
        self.listbox_att.grid(row = 3, column = 3, sticky = W)

        #Botao que quando clicado imprime os atributos completos do objeto professor no segundo listbox
        Label(self.frame2, text="").grid(row = 1, column = 1)
        self.botao_mostrar_att = Button(self.frame2, width = 15, command = self.Escolha, text = "Perfil Completo")
        self.botao_mostrar_att.grid(row = 2, column = 1, sticky = NW, padx= 10)

        #Botão pra editar objeto selecionado
        self.botao_editar = Button(self.frame2, width = 15, command = None, text = "Editar")
        self.botao_editar.grid(row = 2, column = 2, sticky = NE, padx= 10)

        #Botão pra excluir objeto selecionado
        self.botao_excluir = Button(self.frame2, width = 15, command = self.Excluir, text = "Deletar")
        self.botao_excluir.grid(row = 3, column = 1, sticky = NW, padx= 10, pady = 10)

    def Pesquisar(self):
        self.listbox_livros.delete(0, END)
        self.lista_2=[]
        
        
        if self.var_escolha.get() == 'Titulo':
            for item in self.lista:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                entrada = self.texto.get()
                
                titulo_grande = titulo.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in titulo_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)

                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

                   
        if self.var_escolha.get() == 'Autor':
            for item in self.lista:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                autor = item.getAutor()
                entrada = self.texto.get()

                autor_grande = autor.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in autor_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

        if self.var_escolha.get() == 'Sub Titulo':
            for item in self.lista:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                sub_titulo = item.getSub_titulo()
                entrada = self.texto.get()

                sub_titulo_grande = sub_titulo.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in sub_titulo_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

        if self.var_escolha.get() == 'Editora':
            for item in self.lista:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                editora = item.getEditora()
                entrada = self.texto.get()

                editora_grande = editora.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in editora_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

        if self.var_escolha.get() == 'Materia':
            for item in self.lista:
                titulo = item.getTitulo()
                codigo = item.getCodigo()
                materia = item.getMateria_livro()
                entrada = self.texto.get()

                materia_grande = materia.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in materia_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

        if self.var_escolha.get() == 'Codigo':
            for item in self.lista:
                titulo = item.getTitulo()
                Codigo = item.getCodigo()
                entrada = self.texto.get()

                codigo_grande = codigo.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in codigo_grande:
                    self.lista_2.append(item)
                    self.listbox_livros.insert(END, titulo + '    ' + codigo)
                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_livros.insert(END, titulo + '    ' + codigo)

    def Escolha(self): 
        try:
            indice = self.listbox_livros.curselection()[0]
            self.valor = self.lista_2[int(indice)]
            
            titulo =  self.valor.getTitulo()
            sub_titulo = self.valor.getSub_titulo()
            autor = self.valor.getAutor()
            conservacao = self.valor.getConservacao()
            editora = self.valor.getEditora()
            tipo = self.valor.getTipo()
            num_edicao = self.valor.getNum_edicao()
            codigo = self.valor.getCodigo()
            materia_livro = self.valor.getMateria_livro()
            emprestado = self.valor.getEmprestado()
            if emprestado == True:
                estado = "Emprestado"
            else:
                estado = "No estoque"
            
            self.listbox_att.delete(0, END)
            self.listbox_att.insert(END, 'Titulo: ' + '  ' + titulo)
            self.listbox_att.insert(END, 'Sub Titulo: ' + '  ' + sub_titulo)
            self.listbox_att.insert(END, 'Autor: ' + '  ' + autor)
            self.listbox_att.insert(END, 'Conservacao: ' + '  ' + conservacao)
            self.listbox_att.insert(END, 'Editora: ' + '  ' + editora)
            self.listbox_att.insert(END, 'Tipo: ' + '  ' + tipo)
            self.listbox_att.insert(END, 'Numero da Edicao: ' + '  ' + num_edicao)
            self.listbox_att.insert(END, 'Codigo: ' + '  '+ codigo)
            self.listbox_att.insert(END, 'Materia do Livro: ' + '  ' + materia_livro)
            self.listbox_att.insert(END, 'Emprestado' + '  ' + estado)
        except:
            self.value = None

    def Excluir(self):
        indice = self.listbox_livros.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        self.lista.remove(self.valor)
        self.arquivo = open('Livros.tab', 'w')
        pickle.dump(self.lista, self.arquivo)
        self.arquivo.close()
        tkMessageBox.showinfo('Mensagem do sistema', 'O Livro foi excluido com sucesso.')



class janelaDeCadastroDeFuncionario:
    def __init__(self, pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Cadastro de funcionario')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)
        self.frame3=Frame(self.meuPai)
        self.frame3.grid(row = 3, column = 1)

        #Formulario de cadastro
        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Nome Completo: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)              
        self.nome = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.nome.grid(row = 2, column = 2, sticky = W)
        self.nome.focus_force()

        Label(self.frame1, text="Telefone: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.telefone = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.telefone.grid(row = 3, column = 2, sticky = W)

        Label(self.frame1, text="Cpf: ", font = fonte_label).grid(row = 4, column = 1, sticky = W)
        self.cpf = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.cpf.grid(row = 4, column = 2, sticky = W)

        Label(self.frame1, text="Email: ", font = fonte_label).grid(row = 5, column = 1, stick = W)
        self.email = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email.grid(row = 5, column = 2, stick = W)

        #Esse requisito precisa ser mais bem especificado, pra poder ser feito um optionMenu pra controlar os tipos
        #de funções da escola
        Label(self.frame1, text="Função: ", font = fonte_label).grid(row = 6, column = 1, sticky = W)
        self.funcao = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.funcao.grid(row = 6, column = 2, stick = W)

        #Esse requisito precisa ser mais bem especificado, pra poder ser feito um optionMenu pra controlar os tipos
        #de setores da escola
        Label(self.frame1, text="Setor onde trabalha: ", font = fonte_label).grid(row = 7, column = 1, sticky = W)
        self.setor = Entry(self.frame1, width = comprimento_texto_tel, font = fonte_texto)
        self.setor.grid(row = 7, column = 2, stick = W)

        Label(self.frame1, text="No Max de Emprestimos: ", font = fonte_label).grid(row = 8, column = 1, stick = W)
        self.var_max_emprestimo = StringVar(self.frame1)
        self.var_max_emprestimo.set('3')
        self.max_emprestimo = OptionMenu(self.frame1, self.var_max_emprestimo, '1', '2', '3')
        self.max_emprestimo.config(width = 4)
        self.max_emprestimo.grid(row = 8, column = 2, stick = W)

        Label(self.frame1, text="Autorizado: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.var_autorizacao = StringVar(self.frame1)
        self.var_autorizacao.set("Sim")
        self.autorizacao = OptionMenu(self.frame1, self.var_autorizacao, "Sim", "Nao")
        self.autorizacao.config(width = 4)
        self.autorizacao.grid(row = 9, column = 2, sticky = W)

        Label(self.frame2, text="").grid(row = 1, column = 1)
        self.botao_cadastrar = Button(self.frame2, width = 10, command = self.Cadastrar, text = "Cadastrar").grid(row = 2, column = 1, padx= 10)
        self.botao_cancelar = Button(self.frame2, width = 10, command = self.Cancelar, text = "Cancelar").grid(row = 2, column = 2, padx = 10)

        self.cancela = False

    def Cadastrar(self):
        if verifica_campo_apenas_letras(self.nome.get()) and \
        verifica_telefone(self.telefone.get()) and \
        verifica_campo_apenas_numeros(self.cpf.get()) and \
        verifica_email(self.email.get()) and \
        verifica_campo_apenas_letras(self.funcao.get()) and \
        verifica_campo_apenas_letras(self.setor.get()) and \
        verifica_campo_apenas_numeros(self.var_max_emprestimo.get()) and \
        verifica_campo_apenas_letras(self.var_autorizacao.get()):
            self.sistema = programa()
            self.sistema.Cadastrar_Funcionario(self.nome.get(), self.telefone.get(), self.cpf.get(), self.email.get(),
                                               self.funcao.get(),self.setor.get(),self.var_max_emprestimo.get(),
                                               self.var_autorizacao.get())

    def Cancelar(self):
        if self.cancela==False:
            raiz_cancela=Tk()
            janelaprincipal = JanelaPrincipal(raiz_cancela)
            self.meuPai.destroy()



class janelaDeConsultaDeFuncionario:
    def __init__(self, pai):
        #cria lista de objetos alunos
        self.lista = []
        self.arquivo = open("Funcionarios.tab")
        self.lista = pickle.load(self.arquivo)
        self.arquivo.close()
        
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width = False, height = False)
        self.meuPai.title('Formulario de Consulta de funcionario')

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.frame1)
        self.frame2.grid(row = 5, column = 1)

        #Menu de opções de pesquisa
        self.var_escolha = StringVar(self.frame1)
        self.var_escolha.set('Nome') 
        self.escolha = OptionMenu(self.frame1, self.var_escolha, 'Nome', 'Cpf')
        self.escolha.config(width = 8)        
        self.escolha.grid(row = 1, column = 1, sticky = W)

        #Entrada do valor a ser pesquisado
        self.texto = Entry(self.frame1, width = 20, font = fonte_texto)
        self.texto.grid(row = 1, column = 1, sticky = E)
        self.texto.focus_force()

        #Botao de pesquisa
        self.botao_pesquisar = Button(self.frame1, width = 15, command = self.Pesquisar, text = "Pesquisar")
        self.botao_pesquisar.grid(row = 1, column = 3, sticky = W)

        #cria uma listbox
        Label(self.frame1, text='Nome    /    Cpf', font = fonte_label).grid(row = 2, column = 1, sticky = W)
        self.listbox_funcionarios = Listbox(self.frame1, font = fonte_texto, width = 35)
        self.listbox_funcionarios.grid(row = 3, column = 1, sticky = W)

        #Cria uma barra de rolagem
        self.scroll = Scrollbar(self.frame1, command = self.listbox_funcionarios.yview)
        self.scroll.grid(row = 3, column = 2, sticky=(N,S))

        #Faz o scroll bar andar de acordo com a listbox_alunos
        self.listbox_funcionarios['yscrollcommand'] = self.scroll.set

        #cria uma nova listbox
        Label(self.frame1, text='Perfil', font = fonte_label).grid(row = 2, column = 3, sticky = W)
        self.listbox_att = Listbox(self.frame1, font = fonte_texto, width = 40)
        self.listbox_att.grid(row = 3, column = 3, sticky = W)

        #Botao que quando clicado imprime os atributos completos do objeto aluno no segundo listbox
        Label(self.frame2, text="").grid(row = 2, column = 1)
        self.botao_mostrar_att = Button(self.frame2, width = 15, command = self.Escolha, text = "Perfil Completo")
        self.botao_mostrar_att.grid(row = 3, column = 1, sticky = NW, padx= 10)

        #Botão pra editar objeto selecionado
        self.botao_editar = Button(self.frame2, width = 15, command = None, text = "Editar")
        self.botao_editar.grid(row = 3, column = 2, sticky = NE, padx= 10)

        #Botão pra excluir objeto selecionado
        self.botao_excluir = Button(self.frame2, width = 15, command = self.Excluir, text = "Deletar")
        self.botao_excluir.grid(row = 4, column = 1, sticky = NW, padx= 10, pady = 10)

    def Pesquisar(self):
        self.listbox_funcionarios.delete(0, END)
        self.lista_2=[]
        
        #pesquisa por nome
        if self.var_escolha.get() == 'Nome':
            for item in self.lista:
                nome = item.getNome()
                cpf = item.getCpf()
                entrada = self.texto.get()
                
                nome_grande = nome.upper()
                entrada_grande = entrada.upper()
                if entrada_grande in nome_grande:
                    self.lista_2.append(item)
                    self.listbox_funcionarios.insert(END, nome + '    ' + cpf)

                elif entrada_grande == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_funcionarios.insert(END, nome + '    ' + cpf)

        #pesquisa por matricula            
        if self.var_escolha.get() == 'Cpf':
            for item in self.lista:
                nome = item.getNome()
                cpf = item.getCpf()
                entrada = self.texto.get()
                if entrada in cpf:
                    self.lista_2.append(item)
                    self.listbox_funcionarios.insert(END, nome + '    ' + cpf)
                elif entrada == '':
                    for item in self.lista:
                        self.lista_2.append(item)
                        self.listbox_funcionarios.insert(END, nome + '    ' + cpf)

    def Escolha(self): 
        try:
            indice = self.listbox_funcionarios.curselection()[0]
            self.valor = self.lista_2[int(indice)]
            
            nome =  self.valor.getNome()
            telefone = self.valor.getTelefone()
            cpf = self.valor.getCpf()
            email = self.valor.getEmail()
            funcao = self.valor.getFuncao()
            setor = self.valor.getSetor()
            max_emprestimo = self.valor.getMaxDeEmprestimo()
            autorizado = self.valor.getAutorizacao()
            
            self.listbox_att.delete(0, END)
            self.listbox_att.insert(END, 'Nome: ' + '  ' + nome)
            self.listbox_att.insert(END, 'Telefone: ' + '  ' + telefone)
            self.listbox_att.insert(END, 'Cpf: ' + '  ' + cpf)
            self.listbox_att.insert(END, 'Funcao: ' + '  ' + funcao)
            self.listbox_att.insert(END, 'Setor: ' + '  ' + setor)
            self.listbox_att.insert(END, 'Email: ' + '  ' + email)
            self.listbox_att.insert(END, 'Max de Emprestimos: ' + '  ' + max_emprestimo)
            self.listbox_att.insert(END, 'Autorizado: ' + '  ' + autorizado)
        except:
            self.value = None

    def Excluir(self):
        indice = self.listbox_funcionarios.curselection()[0]
        self.valor = self.lista_2[int(indice)]
        self.lista.remove(self.valor)
        self.arquivo = open('Funcionarios.tab', 'w')
        pickle.dump(self.lista, self.arquivo)
        self.arquivo.close()
        tkMessageBox.showinfo('Mensagem do sistema', 'O Funcionario foi excluido com sucesso.')

class JanelaEdicaoAluno:
    def __init__(self,pai):
        menu = JanelaPrincipal(pai)
        self.meuPai = pai
        self.meuPai.title("Formulario de Edição de Aluno")
        self.meuPai.minsize(width = 600, height = 400)
        self.meuPai.resizable(width=False, height=False)

        self.frame1=Frame(self.meuPai)
        self.frame1.grid(row = 1, column = 1)
        self.frame2=Frame(self.meuPai)
        self.frame2.grid(row = 2, column = 1)
        self.frame3=Frame(self.meuPai)
        self.frame3.grid(row = 3, column = 1)

        #Formulario de cadastro
        Label(self.frame1, text="").grid(row = 1, column = 1) #pula uma linha
        
        Label(self.frame1, text="Nome Completo: ", font = fonte_label).grid(row = 2, column = 1, sticky = W)              
        self.nome = Entry(self.frame1, width = comprimento_texto_nome, font = fonte_texto)
        self.nome.grid(row = 2, column = 2, sticky = W)
        self.nome.focus_force()
        
        Label(self.frame1, text="Serie: ", font = fonte_label).grid(row = 3, column = 1, sticky = W)
        self.var_serie = StringVar(self.frame1) #A criacao dessa variavel eh obrigatoria
        self.var_serie.set('1') #Determina o valor padrao que aparece na lista de opcoes
        self.serie = OptionMenu(self.frame1, self.var_serie, '1','2','3','4','5','6','7','8','9')
        self.serie.config(width = 4)
        self.serie.grid(row = 3, column = 2, sticky = W)

        #Periodo = Fundamental ou Medio
        self.var_periodo = StringVar(self.frame1)
        self.var_periodo.set("Fundamental")
        self.periodo = OptionMenu(self.frame1, self.var_periodo, "Fundamental", "Medio")
        self.periodo.config(width = 11)
        self.periodo.grid(row = 3, column = 2, sticky = E)

        Label(self.frame1, text="Turno: ", font = fonte_label).grid(row = 4, column = 1, sticky = W) 
        self.var_turno = StringVar(self.frame1)
        self.var_turno.set('M') 
        self.turno = OptionMenu(self.frame1, self.var_turno, 'M', 'T', 'N')
        self.turno.config(width = 4)        
        self.turno.grid(row = 4, column = 2, sticky = W)
        
        Label(self.frame1, text="Matricula:", font = fonte_label).grid(row = 5, column = 1, sticky = W)
        self.matricula = Entry(self.frame1, width = 10, font = fonte_texto)
        self.matricula.grid(row = 5, column = 2, sticky = W)
        
        Label(self.frame1, text="E-mail Aluno: ", font = fonte_label).grid(row = 6, column = 1, sticky = W)
        self.email = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email.grid(row = 6, column = 2, sticky = W)

        Label(self.frame1, text="E-mail Pais: ", font = fonte_label).grid(row = 7, column = 1, sticky = W)
        self.email_pais = Entry(self.frame1, width = comprimento_texto_email, font = fonte_texto)
        self.email_pais.grid(row = 7, column = 2, sticky = W)
        

        Label(self.frame1, text="No Max de Emprestimos: ",font = fonte_label).grid(row = 8, column = 1, sticky = W)
        self.var_max_emprestimo = StringVar(self.frame1)
        self.var_max_emprestimo.set("3")
        self.max_emprestimo = OptionMenu(self.frame1, self.var_max_emprestimo, '1', '2', '3')
        self.max_emprestimo.config(width = 4)
        self.max_emprestimo.grid(row = 8, column = 2, sticky = W)

        Label(self.frame1, text="Autorizado: ", font = fonte_label).grid(row = 9, column = 1, sticky = W)
        self.var_autorizacao = StringVar(self.frame1)
        self.var_autorizacao.set("Sim")
        self.autorizacao = OptionMenu(self.frame1, self.var_autorizacao, "Sim", "Nao")
        self.autorizacao.config(width = 4)
        self.autorizacao.grid(row = 9, column = 2, sticky = W)

        Label(self.frame2, text="").grid(row = 1, column = 1)
        Label(self.frame2, text="").grid(row = 2, column = 1)
        Label(self.frame2, text="").grid(row = 3, column = 1)
        botao_Ok = Button(self.frame2, width = 10, command = self.Ok, text = "Ok").grid(row = 4, column = 1, padx= 10)
        botao_Cancelar = Button(self.frame2, width = 10, command = self.Cancelar, text = "Cancelar").grid(row = 4, column = 2, padx = 10)
        
    def Ok(self):
        self.sistema = programa()
        self.sistema.Editar_Aluno(self.nome.get(), self.var_serie.get(), self.var_periodo.get(),
                                     self.var_turno.get(),self.email.get(), self.email_pais.get(),
                                     self.var_max_emprestimo.get(),self.var_autorizacao.get(), self.matricula.get())                
        self.meuPai.destroy()
    
    def Cancelar(self):
        #print 'cancelar'
        self.meuPai.destroy()



root = Tk()
janelaPrincipal = janelaLogin(root)
root.mainloop()
